package com.dxy.yesas2020goals.study.partone.disignprinciple.openclosedprinciple;

/**
 * @author victorydeng
 * @Classname CourceTest
 * @Description 测试课程类
 * @Date 2020/2/24 15:38
 * @Created by victorydeng
 */
public class CourceTest {

  public static void main(String[] args) {
    //代码刚上线时只要1种课程售价为10000元
    ICourse iCourse  = new JavaCourse(1, "java课程", 10000D);
    System.out.println("我们的课程信息如下" + "课程编号：" + iCourse.getId() + " 课程名字：" + iCourse.getName() + " 课程价格：" + iCourse.getPrice());
    //突然就到国庆了，课程准备做活动对课程打五折销售 没有使用面向抽象编程的情况的时候 可以在原来的JavaCourse类中修改如下：
    /**
     *   @Override
     *   public Double getPrice() {
     *     return this.price*0.5; //0.5为折扣率
     *   }
     */
    //这样修改虽然也可以完成功能，但会带来潜在的问题，可能有其他地方使用到了这个价格
    //基于开闭原则和单一职责考虑在不改变原来代码的情况下我们新建了一个JavaDiscountCourse类来处理活动是课程促销的情况
    ICourse iCourse2  = new JavaDiscountCourse(1, "java课程", 10000D);
    System.out.println("促销期间我们的课程信息如下" + "课程编号：" + iCourse2.getId() + " 课程名字：" + iCourse2.getName() + " 课程价格：" + iCourse2.getPrice());
    //这样做了之后会丢失原价 需要补上一个获取原价的方法
    System.out.println("课程原价：" + ((JavaDiscountCourse) iCourse2).getOriginPrice());



  }

}
